package main.sort;

public class BubbleSort extends BaseSort {
    public BubbleSort(int[] array) {
        super(array);
        this.name = "冒泡排序";
    }

    /**
     * 比较相邻的两个数据，如果第二个数小，就交换位置。
     * 从后向前两两比较，一直到比较最前两个数据。最终最小数被交换到起始的位置，这样第一个最小数的位置就排好了。
     * 继续重复上述过程，依次将第2.3...n-1个最小数排好位置。
     * <br>
     * [7, 6, 5, 4, 3, 2, 1, 8]<br>
     * [6, 5, 4, 3, 2, 1, 7, 8]<br>
     * [5, 4, 3, 2, 1, 6, 7, 8]<br>
     * [4, 3, 2, 1, 5, 6, 7, 8]<br>
     * [3, 2, 1, 4, 5, 6, 7, 8]<br>
     * [2, 1, 3, 4, 5, 6, 7, 8]<br>
     * [1, 2, 3, 4, 5, 6, 7, 8]
     */
    @Override
    public void sort() {
        boolean swap;
        for (int i = 0; i < array.length - 1; i++) {
            swap = false;
            for (int j = 0; j < array.length - 1 - i; j++) {
                if (array[j] > array[j + 1]) {
                    swap(array, j, j + 1);
                    swap = true;
                }
            }
            print();
            if (!swap) {
                break;
            }
        }
    }
}
